<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //函数作为参数
      function gaojie(m) {
        m()
        //console.log(m)
      }

      function dijie() {
        return 100
      }

      //函数作为参数常见于回调函数与事件处理函数
      //$(function(){})//纯回调函数
      //btn.addEventListner('click',function())//事件处理

      //该结果获得是5，函数中m是个未知参数，控制台写的参数是未知的，在调用的时候加入的实参5，所以控制台输出的是5
      //gaojie(5)
      //该结果是将dijie的整个函数形式传到控制台中，没有任何结果输出
      //gaojie(dijie)
      //下列写法，是将返回值传入到控制台中
      //gaojie(dijie())

      function p() {
        return 100
      }

      let result = p()
      console.log(result)

      //函数作为返回值
      function p2() {
        //返回了一个匿名函数
        return function () {
          return 200
        }
      }

      //fun这个变量指代的就死返回的匿名函数，相当于此时函数名是fun了
      let fun = p2()
      //因为是个函数，可以继续调用
      let result3 = fun()

      //上面两行写法相当于下列的写法
      let result2 = p2()()
      console.log(result2)

      //练习：let result3 = p2()(5,6) ===>result3 = 5+6 = 11
      function sum() {
        return function (m, n) {
          return m + n
        }
      }

      let result4 = sum()(5, 6)
      console.log(result4)
    </script>
  </body>
</html>
